import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# opencv方法读取-cv2.calcHist（速度最快）
# 图像，通道[0]-灰度图，掩膜-无，灰度级，像素范围
array = [r'E:\images\pic2.png', r'E:\images\pic6.png']
for imgt in array:
    imgs = cv.imread(imgt)
    hist_cv = cv.calcHist([imgs], [0], None, [256], [0, 256])
    # numpy方法读取-np.histogram()
    hist_np, bins = np.histogram(imgs.ravel(), 256, [0, 256])
    # numpy的另一种方法读取-np.bincount()（速度=10倍法2）
    hist_np2 = np.bincount(imgs.ravel(), minlength=256)
    plt.subplot(221), plt.imshow(imgs, 'gray')
    plt.subplot(222), plt.plot(hist_cv)
    plt.subplot(223), plt.plot(hist_np)
    plt.subplot(224), plt.plot(hist_np2)
    plt.show()

    #Otsu大津算法chu
    gray = cv.cvtColor(imgs, cv.COLOR_BGR2GRAY)  # 转换为灰度图
    retval, dst = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)  # 使用大津算法进行图像二值化
    cv.namedWindow("dst", 2)
    cv.imshow("Otsu", dst)

cv.waitKey()
cv.destroyAllWindows()
